// 创建表单校验方法，传递需要校验的规则 schema 即可，里面返回函数
// 返回的函数，成功正常执行，失败 return res.cc(err)
const validation = (schema, option = {
    // false：表示对所有字段进行校验错误；如果不定义，只要发现不合法的字段就会停止校验
    abortEarly: false,
    // 允许验证被对象包含没有定义校验规则的未知字段，否则会认为被校验数据不通过
    allowUnknown: true
}) => {
    return async (req, res, next) => {
        try {
            let obj = {}
            if (JSON.stringify(req.body) !== '{}') {
                obj = req.body
            } else if (JSON.stringify(req.query) !== '{}') {
                obj = req.query
            } else if (JSON.stringify(req.params) !== '{}') {
                obj = req.params
            }
            await schema.validateAsync(obj, option);
            next()
        } catch (err) {
            return res.cc(err)
        }
    }
}

exports.validation = validation

// 不建议使用，因为使用时，要在使用的地方加上 try{} catch{}
/* 
try{
    await dbPromise(sql,arr)
} catch{
    res.cc(err)
}
*/
const db = require('../db')
const dbPromise = (str, arr = []) => {
    // 返回一个Promise实例对象
    return new Promise((resolve, reject) => {
        db.query(str, arr, (err, result) => {
            if (err) {
                reject(err)
            }
            resolve(result)
        })
    })
}
exports.dbPromise = dbPromise